/**
 * @copyright Copyright (c) 2025 CSG Digital Grid Technology (Guangdong) Co., Ltd.
 * @author Chen Yongjie
 */
#ifndef __TEST_CS_GETOPT_H
#define __TEST_CS_GETOPT_H

#include <CUnit/CUnit.h>

/**
 * @brief 测试help函数的输出内容是否正确
 * 
 * 测试目标：验证help函数输出的帮助信息是否完全符合预期
 * 测试步骤：
 * 1. 重定向标准输出到缓冲区
 * 2. 调用help函数
 * 3. 恢复标准输出
 * 4. 比较输出内容与预期内容
 */
void test_help_output(void);

/**
 * @brief 测试help函数在标准输出重定向失败时的行为
 * 
 * 测试目标：验证help函数在输出重定向失败时的处理
 * 测试步骤：
 * 1. 关闭标准输出
 * 2. 调用help函数
 * 3. 恢复标准输出
 * 4. 验证函数是否正常返回
 */
void test_help_stdout_failure(void);

/**
 * @brief 测试help函数的格式化输出
 * 
 * 测试目标：验证help函数输出的格式是否正确
 * 测试步骤：
 * 1. 重定向输出到缓冲区
 * 2. 调用help函数
 * 3. 检查输出的换行符和缩进是否正确
 */
void test_help_format(void);

/**
 * @brief 测试getOptionParam函数处理-h选项的情况
 * 
 * 测试目标：验证函数是否正确处理帮助选项
 * 测试步骤：
 * 1. 构造带有-h参数的命令行参数
 * 2. 调用getOptionParam函数
 * 3. 验证返回值和输出内容
 */
void test_getOptionParam_help(void);

/**
 * @brief 测试getOptionParam函数处理-v选项的情况
 * 
 * 测试目标：验证函数是否正确显示版本信息
 * 测试步骤：
 * 1. 构造带有-v参数的命令行参数
 * 2. 调用getOptionParam函数
 * 3. 验证返回值和版本信息输出
 */
void test_getOptionParam_version(void);

/**
 * @brief 测试getOptionParam函数处理-c选项的情况
 * 
 * 测试目标：验证函数是否正确处理CPU使用率查询
 * 测试步骤：
 * 1. 分别测试host和container参数
 * 2. 验证返回值和输出格式
 */
void test_getOptionParam_cpu(void);

/**
 * @brief 测试getOptionParam函数处理-m选项的情况
 * 
 * 测试目标：验证函数是否正确处理内存使用率查询
 * 测试步骤：
 * 1. 分别测试host和container参数
 * 2. 验证返回值和输出格式
 */
void test_getOptionParam_memory(void);

/**
 * @brief 测试getOptionParam函数处理-i选项的情况
 * 
 * 测试目标：验证函数是否正确处理存储使用率查询
 * 测试步骤：
 * 1. 分别测试host和container参数
 * 2. 验证返回值和输出格式
 */
void test_getOptionParam_storage(void);

/**
 * @brief 测试getOptionParam函数处理-a选项的情况
 * 
 * 测试目标：验证函数是否正确处理所有信息查询
 * 测试步骤：
 * 1. 分别测试host和container参数
 * 2. 验证返回值和完整输出格式
 */
void test_getOptionParam_all(void);

/**
 * @brief 测试getOptionParam函数处理无效参数的情况
 * 
 * 测试目标：验证函数对无效参数的错误处理
 * 测试步骤：
 * 1. 测试无参数情况
 * 2. 测试无效选项
 * 3. 测试无效参数值
 */
void test_getOptionParam_invalid(void);

/**
 * @brief 测试getOptionParam函数处理-c选项的host参数情况
 * 
 * 测试目标：验证函数是否正确处理CPU使用率的host参数查询
 * 测试步骤：
 * 1. 准备带有-c host参数的命令行参数
 * 2. 重定向标准输出
 * 3. 调用getOptionParam函数
 * 
 * 预期结果：
 * 1. 函数应该返回TRUE
 * 2. 输出应包含主机名和CPU使用率
 * 3. 输出格式应符合预期
 */
void test_getOptionParam_cpu_host(void);

/**
 * @brief 测试getOptionParam函数处理-c选项的container参数情况
 */
void test_getOptionParam_cpu_container(void);

/**
 * @brief 测试getOptionParam函数处理-m选项的host参数情况
 */
void test_getOptionParam_memory_host(void);

/**
 * @brief 测试getOptionParam函数处理-m选项的container参数情况
 */
void test_getOptionParam_memory_container(void);

/**
 * @brief 测试getOptionParam函数处理-i选项的host参数情况
 */
void test_getOptionParam_storage_host(void);

/**
 * @brief 测试getOptionParam函数处理-a选项的host参数情况
 */
void test_getOptionParam_all_host(void);

/**
 * @brief 测试getOptionParam函数处理-i选项的container参数情况
 */
void test_getOptionParam_storage_container(void);

/**
 * @brief 测试getOptionParam函数处理-a选项的container参数情况
 */
void test_getOptionParam_all_container(void);

/**
 * @brief 测试getOptionParam函数在内存分配失败的情况
 */
void test_getOptionParam_malloc_failure(void);

/**
 * @brief 测试getOptionParam函数在无参数情况下的行为
 */
void test_getOptionParam_no_args(void);

/**
 * @brief 测试getOptionParam函数在参数值为空字符串的情况
 */
void test_getOptionParam_empty_param(void);

/**
 * @brief 测试getOptionParam函数处理所有选项组合的情况
 */
void test_getOptionParam_combinations(void);

/**
 * @brief 测试getOptionParam函数在系统调用失败的情况
 */
void test_getOptionParam_syscall_failure(void);

/**
 * @brief 测试getOptionParam函数在极限条件下的行为
 */
void test_getOptionParam_boundary_conditions(void);

/**
 * @brief 测试getOptionParam函数的状态清理功能
 */
void test_getOptionParam_state_cleanup(void);

/**
 * @brief 测试getOptionParam函数在命令行参数包含Unicode字符的情况
 */
void test_getOptionParam_unicode_chars(void);

/**
 * @brief 测试getOptionParam函数在命令行参数超过最大长度的情况
 */
void test_getOptionParam_max_length(void);

/**
 * @brief 测试getOptionParam函数在重复调用时的内存管理
 */
void test_getOptionParam_memory_management(void);

/**
 * @brief 测试getOptionParam函数在高负载情况下的性能
 */
void test_getOptionParam_performance(void);

/**
 * @brief 测试getOptionParam函数在参数包含路径分隔符的情况
 */
void test_getOptionParam_path_separators(void);

/**
 * @brief 测试getOptionParam函数在环境变量缺失的情况
 */
void test_getOptionParam_missing_env(void);

#endif /* __TEST_CS_GETOPT_H */